Skip to content

feat: Forward Braze recommended eCommerce events (opt-in)#66

Open
nickolas-dimitrakas wants to merge 3 commits into
master-v6from
feat/recommended-ecommerce-events
Open

feat: Forward Braze recommended eCommerce events (opt-in)#66
nickolas-dimitrakas wants to merge 3 commits into
master-v6from
feat/recommended-ecommerce-events

Conversation

@nickolas-dimitrakas

Copy link
Copy Markdown

Background

Braze Web SDK 6.8.0+ introduces recommended eCommerce events via braze.logEcommerceEvent, which unlock calculated profile fields, eCommerce reporting, and out-of-the-box Canvas templates. This mirrors the iOS work in mparticle-apple-sdk#793 and the Android braze-42 track.

What changed

  • New opt-in useEcommerceRecommendedEvents connection setting. When enabled, the six supported mParticle commerce actions map to Braze's recommended events:

    mParticle action Braze event
    add_to_cart / remove_from_cart ecommerce.cart_updated (action add/remove)
    checkout ecommerce.checkout_started
    view_detail ecommerce.product_viewed (one per product)
    purchase ecommerce.order_placed
    refund ecommerce.order_refunded (custom event; no typed Braze API)
  • Bumps @braze/web-sdk to ^6.8.0.

  • Runtime capability guard: braze.logEcommerceEvent support is detected at call time (typeof braze.logEcommerceEvent === 'function'). When the setting is off (default), the host Braze SDK is older than 6.8.0, or the action is unsupported / has no products, the kit falls back to the existing legacy forwarding — no breaking change.

  • Attributes without a direct Braze field (cart_id, checkout_id, source, tax, shipping, product brand/category/coupon_code/position, etc.) are nested in event/product metadata per Braze's strict schema. source is "web". cart_id/checkout_id fall back to the mParticle session id.

  • Regenerated dist/ bundles.

Testing

  • npm test (Karma/Mocha) — all 9 new recommended-eCommerce tests pass (each mapped event + toggle-off, unsupported-action, and older-SDK fallbacks). The only failing specs are pre-existing on master-v6 (stale v5 suffix assertions and a date-based age test), unrelated to this change.

🤖 Generated with Claude Code

nickolas-dimitrakas and others added 2 commits July 6, 2026 16:51
Add an opt-in `useEcommerceRecommendedEvents` setting that forwards the six
supported mParticle commerce actions using Braze's recommended eCommerce
event schema (cart_updated, checkout_started, product_viewed, order_placed,
and order_refunded via logCustomEvent). Requires Braze Web SDK 6.8.0+
(braze.logEcommerceEvent); support is detected at runtime, so older host
SDKs and unsupported actions fall back to legacy forwarding. Bumps the
@braze/web-sdk dependency to ^6.8.0.

Attributes without a direct Braze field are nested in event/product metadata
per Braze's strict schema; source is reported as "web". Includes Mocha tests
for each mapped event and the fallback paths, and regenerates the dist bundles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Three specs were failing on master-v6 independent of the eCommerce change:
- the suffix and forwarder-registration tests still asserted the v5 values
  ('v5' / 'Appboy-v5') after the kit moved to v6, and
- the reserved-attributes test hard-coded the expected birth year (2015),
  which drifts every calendar year.

Update the version assertions to v6 and derive the expected birth year
dynamically (current year - age) so the suite is green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@nickolas-dimitrakas nickolas-dimitrakas self-assigned this Jul 6, 2026
buildRecommendedEventMetadata copied every commerce custom attribute into the
event metadata object, including cart_id, checkout_id, and total_discounts,
which are also promoted to typed recommended-event fields — so they appeared
twice on the outbound event. Exclude the promoted keys from metadata; genuinely
custom attributes are unaffected. Adds assertions covering the dedup and
regenerates the dist bundles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant